struct ListNode {
    int val;
    ListNode* next;
    ListNode() :val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
    ListNode(int x, ListNode *next) : val(x), next(next) {}
};

ListNode* ReverseList(ListNode* head) {
    // // write code here
    // if(head == nullptr) return nullptr;
    // ListNode *node1 = nullptr;
    // ListNode *node2 = head;
    // ListNode *node3 = head->next;
    // // node1 -> node2 -> node3
    // while(node3 != nullptr) {
    //     node2->next = pre;
    //     pre = cur;
    //     cur = curNext;
    //     curNext = curNext->next;
    // }
    // cur->next = pre;
    // return cur;
}